/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ifpb.pp.rh.managedbean;

import ifpb.pp.rh.bean.Endereco;
import ifpb.pp.rh.dao.DAO;
import ifpb.pp.rh.dao.DAOJPA;
import ifpb.pp.rh.entity.Servidor;
import ifpb.pp.rh.util.ContextUtil;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Gabriella
 */
@Controller
public class ServidorManaged {

    @Autowired
    private DAO dao;
    private Servidor servidor;
    private DataModel model;

    public ServidorManaged() {
//        this.dao = new DAOJPA();
    }

    public Servidor getServidor() {
        return servidor;
    }

    public void setServidor(Servidor servidor) {
        this.servidor = servidor;
    }

    public String novoServidor() {
        Endereco end = new Endereco();
        this.servidor = new Servidor();
        this.servidor.setEndereco(end);
        this.addServidorSessao();
        return "servidorCriado";
    }

    public String cadastrarServidor() {
        try {
            System.out.println("VALOR: " + servidor.getNome());
            if (this.dao.salvar(servidor)) {
                this.novoServidor();
                return "servidorCadastrado";
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return "erroCadastrarServidor";
    }

    public Servidor getServidorModificar() {
        Servidor servidorEscolhido = (Servidor) this.model.getRowData();
        return servidorEscolhido;

    }

    public DataModel getListaDeServidores() {
        List<Servidor> listaServidores;
        try {
            listaServidores = (List<Servidor>) this.dao.buscarTodos(Servidor.class);
            this.model = new ListDataModel(listaServidores);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return this.model;
    }

    public String editarServidor() {
        Servidor s = getServidorModificar();
        this.setServidor(s);
        return "editarServidor";
    }

    public String atualizarServidor() {
        Boolean resposta = false;
        try {
            resposta = this.dao.atualizar(this.servidor);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        if (resposta) {
            return "listarServidores";
        }
        return "ErroAtualizarServidores";
    }

    public String remover() {
        try {

            Servidor servidor = getServidorModificar();
            Map<Integer, Object> param = new HashMap<Integer, Object>();
            param.put(1, servidor.getNome());
            Servidor novoServidor = this.dao.consultaSimples("servidor.nome", param);
            if (dao.remover(novoServidor)) {
                return "listarServidores";
            }
        } catch (Exception ex) {
            System.out.println("ERRO em remover Servidor");
            ex.printStackTrace();
        }
        return "erroRemoverServidor";
    }

    public void addServidorSessao() {
        ContextUtil.getSession().setAttribute("servidor", servidor);

    }
}
